package array

import "soluty.cc/go/godash/internal"

// Xor 创建一个给定数组唯一值的数组，返回值的顺序取决于他们数组的出现顺序。
func Xor(arrays ...[]T) []T {
	var ret []T
	for idx, array := range arrays {
		for _, value := range array {
			var uniqValue = true
		label:
			for i := 0; i < len(arrays); i++ {
				if i == idx {
					continue
				}
				otherArr := arrays[i]
				if idx := IndexOf(otherArr, value); idx >= 0 {
					uniqValue = false
					break label
				}
			}
			if uniqValue {
				if !internal.Contains(ret, value) {
					ret = append(ret, value)
				}
			}
		}
	}
	return ret
}
